MySql 的group by having 优化案例

您所在的位置:网站首页 group by having语句 MySql 的group by having 优化案例

MySql 的group by having 优化案例

2023-08-25 08:54| 来源: 网络整理| 查看: 265

Background: 1.pay_award_log为一张审核表,表有重复的记录,数据约51W条 2.award_time字段有btree索引,operator字段没有索引,根据operator和award_time查询频率是一样的 3.operator为后台审核人,uid是用户字段,用户在一天内可能有多条记录,求175587这个后台人员一天内审核的用户数,需要根据uid排除重复的记录

select count(*) no from (select * from pay_award_log group by uid having award_time between UNIX_TIMESTAMP(‘2017-12-07 0:0:0’) and UNIX_TIMESTAMP(‘2017-12-07 23:59:59’) and operator = 175587 ) as award_count 这样子的查询需要耗时0.6-0.8秒,处女座程序员是绝对接收不了这样的龟速的,况且一个页面还有多条这样的sql要查询,一个页面有9条这样的查询,打开这个统计的页面要7-8秒真的是超级慢!

分析SQL: 1.这里查询慢group by是一个很关键的因素,考虑干掉他,用程序去去重 2.多条这样的sql就是where operator = 175587、operator = xxxxx这样的,直接去掉operator, 保留一个索引的where条件,用程序去过滤条件 3.再把统计为昨天的数据增加上缓存,今天的数据也增加上缓存,当天的数据缓存时间设置短点5-30分钟这样 整个优化方案下来页面访问速度提升到0.3S,比之前的访问速度提升了25倍,有缓存的情况下直接秒读



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3